package cn.com.bs.srmp.runner;

import cn.com.bs.srmp.conf.PluginContext;
import lombok.extern.slf4j.Slf4j;

/**
 * @Author mic
 * @Date 2022-08-02 17:47
 */
@Slf4j
public abstract class AbstractRunner {

    protected PluginContext pluginContext;


    /**
     * 执行任务
     *
     * @return true: 成功；false: 失败
     */
    public void run() {
        long startTime = System.currentTimeMillis();
        if (!check()) {
            log.error("{} 校验失败", this.getClass().getSimpleName());
            return;
        }
        try {
            if (!init()) {
                log.error("{} 初始化失败", this.getClass().getSimpleName());
                return;
            }
            operate();
        } catch (Exception e) {
            log.error("error:", e);
            e.printStackTrace();
        }

        long spendTime = System.currentTimeMillis() - startTime;
        log.info("任务执行完毕 {} 耗时: {} s", this.getClass().getSimpleName(), spendTime / 1000.0D);
    }

    /**
     * 初始化
     *
     * @return true: 成功；false: 失败
     */
    public abstract boolean init();

    /**
     * 校验
     *
     * @return true: 成功；false: 失败
     */
    public abstract boolean check();

    /**
     * 执行操作
     */
    public abstract void operate();

    // 获得需要处理的jar包数组
    protected String[] getJarArray() {
        return pluginContext.getJarPaths().toArray(new String[0]);
    }
}
